package com.aviator.detective.script.aviator;

import com.aviator.detective.common.util.StringUtil;

public class AviatorResult<T> {

    private T t;
    private AviatorCode code;
    private String msg;

    AviatorResult(T data,AviatorCode code,String msg){
        this.t = data;
        this.code = code;
        this.msg = msg;
    }

    public static <T> AviatorResult<T> success(T data){
        return new AviatorResult<T>(data,AviatorCode.SUCCESS,"success");
    }

    public static <T> AviatorResult<T> executeError(String errorMsg){
        if (StringUtil.isEmpty(errorMsg)){
            errorMsg = "execute error";
        }
        return new AviatorResult<T>(null,AviatorCode.EXECUTE_ERROR,errorMsg);
    }

    public static <T> AviatorResult<T> compilerError(String errorMsg){
        if (StringUtil.isEmpty(errorMsg)){
            errorMsg = "compiler error";
        }
        return new AviatorResult<T>(null,AviatorCode.COMPILER_ERROR,errorMsg);
    }

    public static <T> AviatorResult<T> initError(String errorMsg){
        if (StringUtil.isEmpty(errorMsg)){
            errorMsg = "init error";
        }
        return new AviatorResult<T>(null,AviatorCode.INIT_ERROR,errorMsg);
    }

    public static <T> AviatorResult<T> castError(String errorMsg){
        if (StringUtil.isEmpty(errorMsg)){
            errorMsg = "cast result error";
        }
        return new AviatorResult<T>(null,AviatorCode.CAST_RESULT_ERROR,errorMsg);
    }

    public static <T> AviatorResult<T> validateFailed(String errorMsg){
        if (StringUtil.isEmpty(errorMsg)){
            errorMsg = "validate failed";
        }
        return new AviatorResult<T>(null,AviatorCode.VALIDATE_FAILED,errorMsg);
    }

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public AviatorCode getCode() {
        return code;
    }

    public void setCode(AviatorCode code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
